// RAP [rh] Keys completely disabled as not implemented in RWT ///******************************************************************************* // * Copyright (c) 2005, 2008 IBM Corporation and others. // * All rights reserved. This program and the accompanying materials // * are made available under the terms of the Eclipse Public License v1.0 // * which accompanies this distribution, and is available at // * http://www.eclipse.org/legal/epl-v10.html // * // * Contributors: // * IBM Corporation - initial API and implementation // * Remy Chi Jian Suen <remy.suen@gmail.com> - Bug 186522 - [KeyBindings] New Keys preference page does not resort by binding with conflicts // *******************************************************************************/ // //package org.eclipse.ui.internal.keys; // //import java.util.ArrayList; //import java.util.Collection; //import java.util.Iterator; //import java.util.LinkedList; // //import org.eclipse.core.commands.Category; //import org.eclipse.core.commands.util.Tracing; //import org.eclipse.core.runtime.IStatus; //import org.eclipse.core.runtime.Status; //import org.eclipse.jface.bindings.Binding; //import org.eclipse.jface.bindings.TriggerSequence; //import org.eclipse.jface.bindings.keys.KeySequence; //import org.eclipse.jface.bindings.keys.KeySequenceText; //import org.eclipse.jface.bindings.keys.KeyStroke; //import org.eclipse.jface.dialogs.IDialogConstants; //import org.eclipse.jface.dialogs.IDialogSettings; //import org.eclipse.jface.dialogs.MessageDialog; //import org.eclipse.jface.preference.PreferencePage; //import org.eclipse.jface.resource.DeviceResourceException; //import org.eclipse.jface.resource.ImageDescriptor; //import org.eclipse.jface.resource.JFaceResources; //import org.eclipse.jface.resource.LocalResourceManager; //import org.eclipse.jface.util.IPropertyChangeListener; //import org.eclipse.jface.util.PropertyChangeEvent; //import org.eclipse.jface.viewers.ComboViewer; //import org.eclipse.jface.viewers.IBaseLabelProvider; //import org.eclipse.jface.viewers.ISelection; //import org.eclipse.jface.viewers.ISelectionChangedListener; //import org.eclipse.jface.viewers.IStructuredContentProvider; //import org.eclipse.jface.viewers.IStructuredSelection; //import org.eclipse.jface.viewers.ITableLabelProvider; //import org.eclipse.jface.viewers.ITreeContentProvider; //import org.eclipse.jface.viewers.LabelProvider; //import org.eclipse.jface.viewers.ListViewer; //import org.eclipse.jface.viewers.SelectionChangedEvent; //import org.eclipse.jface.viewers.StructuredSelection; //import org.eclipse.jface.viewers.TreeViewer; //import org.eclipse.jface.viewers.Viewer; //import org.eclipse.jface.viewers.ViewerComparator; //import org.eclipse.jface.window.Window; //import org.eclipse.swt.SWT; //import org.eclipse.swt.custom.BusyIndicator; //import org.eclipse.swt.events.DisposeEvent; //import org.eclipse.swt.events.DisposeListener; //import org.eclipse.swt.events.FocusEvent; //import org.eclipse.swt.events.FocusListener; //import org.eclipse.swt.events.SelectionAdapter; //import org.eclipse.swt.events.SelectionEvent; //import org.eclipse.swt.events.SelectionListener; //import org.eclipse.swt.graphics.FontMetrics; //import org.eclipse.swt.graphics.GC; //import org.eclipse.swt.graphics.Image; //import org.eclipse.swt.graphics.Point; //import org.eclipse.swt.layout.GridData; //import org.eclipse.swt.layout.GridLayout; //import org.eclipse.swt.widgets.Button; //import org.eclipse.swt.widgets.Composite; //import org.eclipse.swt.widgets.Control; //import org.eclipse.swt.widgets.Label; //import org.eclipse.swt.widgets.Menu; //import org.eclipse.swt.widgets.MenuItem; //import org.eclipse.swt.widgets.Text; //import org.eclipse.swt.widgets.Tree; //import org.eclipse.swt.widgets.TreeColumn; //import org.eclipse.swt.widgets.TreeItem; //import org.eclipse.ui.IWorkbench; //import org.eclipse.ui.IWorkbenchPreferencePage; //import org.eclipse.ui.PlatformUI; //import org.eclipse.ui.commands.ICommandImageService; //import org.eclipse.ui.commands.ICommandService; //import org.eclipse.ui.dialogs.FilteredTree; //import org.eclipse.ui.internal.IWorkbenchHelpContextIds; //import org.eclipse.ui.internal.WorkbenchPlugin; //import org.eclipse.ui.internal.keys.model.BindingElement; //import org.eclipse.ui.internal.keys.model.BindingModel; //import org.eclipse.ui.internal.keys.model.CommonModel; //import org.eclipse.ui.internal.keys.model.ConflictModel; //import org.eclipse.ui.internal.keys.model.ContextElement; //import org.eclipse.ui.internal.keys.model.ContextModel; //import org.eclipse.ui.internal.keys.model.KeyController; //import org.eclipse.ui.internal.keys.model.ModelElement; //import org.eclipse.ui.internal.keys.model.SchemeElement; //import org.eclipse.ui.internal.keys.model.SchemeModel; //import org.eclipse.ui.internal.misc.Policy; //import org.eclipse.ui.internal.util.Util; //import org.eclipse.ui.keys.IBindingService; // ///** // * <p> // * A preference page that is capable of displaying and editing the bindings // * between commands and user input events. These are typically things like // * keyboard shortcuts. // * </p> // * <p> // * This preference page has four general types of methods. Create methods are // * called when the page is first made visible. They are responsible for creating // * all of the widgets, and laying them out within the preference page. Fill // * methods populate the contents of the widgets that contain collections of data // * from which items can be selected. The select methods respond to selection // * events from the user, such as a button press or a table selection. The update // * methods update the contents of various widgets based on the current state of // * the user interface. For example, the command name label will always try to // * match the current select in the binding table. // * </p> // * <p> // * Updated in 3.4 to work with a model backed by the real KeyBinding and // * ParameterizedCommand objects. // * </p> // * // * @since 3.2 // */ //public class NewKeysPreferencePage extends PreferencePage implements // IWorkbenchPreferencePage { // // private static boolean DEBUG = Policy.DEBUG_KEY_BINDINGS; // // private static final String TRACING_COMPONENT = "NewKeysPref"; //$NON-NLS-1$ // // public final static String TAG_DIALOG_SECTION = "org.eclipse.ui.preferences.keysPreferencePage"; //$NON-NLS-1$ // // private static final String TAG_FILTER_ACTION_SETS = "actionSetFilter"; //$NON-NLS-1$ // // private static final String TAG_FILTER_INTERNAL = "internalFilter"; //$NON-NLS-1$ // // private static final String TAG_FILTER_UNCAT = "uncategorizedFilter"; //$NON-NLS-1$ // // /** // * The number of items to show in the bindings table tree. // */ // private static final int ITEMS_TO_SHOW = 7; // // private static final int COMMAND_NAME_COLUMN = 0; // private static final int KEY_SEQUENCE_COLUMN = 1; // private static final int CONTEXT_COLUMN = 2; // private static final int CATEGORY_COLUMN = 3; // private static final int USER_DELTA_COLUMN = 4; // private static int NUM_OF_COLUMNS = USER_DELTA_COLUMN + 1; // // private ComboViewer fSchemeCombo; // // private CategoryPatternFilter fPatternFilter; // // private CategoryFilterTree fFilteredTree; // // private boolean fFilterActionSetContexts = true; // // private boolean fFilterInternalContexts = true; // // private KeyController keyController; // // private Category fDefaultCategory; // // private Label commandNameValueLabel; // // private Text fBindingText; // // private Text fDescriptionText; // // private ComboViewer fWhenCombo; // // private IBindingService fBindingService; // // private KeySequenceText fKeySequenceText; // // private ListViewer conflictViewer; // // private ICommandImageService commandImageService; // // private ICommandService commandService; // // /** // * A FilteredTree that provides a combo which is used to organize and // * display elements in the tree according to the selected criteria. // * // */ // protected class CategoryFilterTree extends FilteredTree { // // private CategoryPatternFilter filter; // // /** // * Constructor for PatternFilteredTree. // * // * @param parent // * @param treeStyle // * @param filter // */ // protected CategoryFilterTree(Composite parent, int treeStyle, // CategoryPatternFilter filter) { // super(parent, treeStyle, filter); // this.filter = filter; // } // // public void filterCategories(boolean b) { // filter.filterCategories(b); // textChanged(); // } // // public boolean isFilteringCategories() { // return filter.isFilteringCategories(); // } // } // // private final class BindingModelComparator extends ViewerComparator { // private LinkedList sortColumns = new LinkedList(); // private boolean ascending = true; // // public BindingModelComparator() { // for (int i = 0; i < NUM_OF_COLUMNS; i++) { // sortColumns.add(new Integer(i)); // } // } // // public int getSortColumn() { // return ((Integer) sortColumns.getFirst()).intValue(); // } // // public void setSortColumn(int column) { // if (column == getSortColumn()) { // return; // } // Integer sortColumn = new Integer(column); // sortColumns.remove(sortColumn); // sortColumns.addFirst(sortColumn); // } // // /** // * @return Returns the ascending. // */ // public boolean isAscending() { // return ascending; // } // // /** // * @param ascending // * The ascending to set. // */ // public void setAscending(boolean ascending) { // this.ascending = ascending; // } // // public final int compare(final Viewer viewer, final Object a, // final Object b) { // int result = 0; // Iterator i = sortColumns.iterator(); // while (i.hasNext() && result == 0) { // int column = ((Integer) i.next()).intValue(); // result = compareColumn(viewer, a, b, column); // } // return ascending ? result : (-1) * result; // } // // private int compareColumn(final Viewer viewer, final Object a, // final Object b, final int columnNumber) { // if (columnNumber == USER_DELTA_COLUMN) { // return sortUser(a, b); // } // IBaseLabelProvider baseLabel = ((TreeViewer) viewer) // .getLabelProvider(); // if (baseLabel instanceof ITableLabelProvider) { // ITableLabelProvider tableProvider = (ITableLabelProvider) baseLabel; // String e1p = tableProvider.getColumnText(a, columnNumber); // String e2p = tableProvider.getColumnText(b, columnNumber); // if (e1p != null && e2p != null) { // return getComparator().compare(e1p, e2p); // } // } // return 0; // } // // private int sortUser(final Object a, final Object b) { // int typeA = ((BindingElement) a).getUserDelta().intValue(); // int typeB = ((BindingElement) b).getUserDelta().intValue(); // int result = typeA - typeB; // return result; // } // // } // // private final class ResortColumn extends SelectionAdapter { // private final BindingModelComparator comparator; // private final TreeColumn treeColumn; // private final TreeViewer viewer; // private final int column; // // private ResortColumn(BindingModelComparator comparator, // TreeColumn treeColumn, TreeViewer viewer, int column) { // this.comparator = comparator; // this.treeColumn = treeColumn; // this.viewer = viewer; // this.column = column; // } // // public void widgetSelected(SelectionEvent e) { // if (comparator.getSortColumn() == column) { // comparator.setAscending(!comparator.isAscending()); // viewer.getTree().setSortDirection( // comparator.isAscending() ? SWT.UP : SWT.DOWN); // } else { // viewer.getTree().setSortColumn(treeColumn); // comparator.setSortColumn(column); // } // try { // viewer.getTree().setRedraw(false); // viewer.refresh(); // } finally { // viewer.getTree().setRedraw(true); // } // } // } // // private static class ListLabelProvider extends LabelProvider { // /* // * (non-Javadoc) // * // * @see org.eclipse.jface.viewers.LabelProvider#getText(java.lang.Object) // */ // public String getText(Object element) { // return ((ModelElement) element).getName(); // } // } // // private class BindingElementLabelProvider extends LabelProvider implements // ITableLabelProvider { // /** // * A resource manager for this preference page. // */ // private final LocalResourceManager localResourceManager = new LocalResourceManager( // JFaceResources.getResources()); // // public final void dispose() { // super.dispose(); // localResourceManager.dispose(); // } // // /* // * (non-Javadoc) // * // * @see org.eclipse.jface.viewers.LabelProvider#getText(java.lang.Object) // */ // public String getText(Object element) { // String rc = getColumnText(element, 0); // if (rc == null) { // super.getText(element); // } // StringBuffer buf = new StringBuffer(rc); // for (int i = 1; i < USER_DELTA_COLUMN; i++) { // String text = getColumnText(element, i); // if (text != null) { // buf.append(' '); // buf.append(text); // } // } // return buf.toString(); // } // // public String getColumnText(Object element, int index) { // BindingElement bindingElement = ((BindingElement) element); // switch (index) { // case COMMAND_NAME_COLUMN: // name // return bindingElement.getName(); // case KEY_SEQUENCE_COLUMN: // keys // TriggerSequence seq = bindingElement.getTrigger(); // return seq == null ? Util.ZERO_LENGTH_STRING : seq.format(); // case CONTEXT_COLUMN: // when // ModelElement context = bindingElement.getContext(); // return context == null ? Util.ZERO_LENGTH_STRING : context // .getName(); // case CATEGORY_COLUMN: // category // return bindingElement.getCategory(); // case USER_DELTA_COLUMN: // user // if (bindingElement.getUserDelta().intValue() == Binding.USER) { // if (bindingElement.getConflict().equals(Boolean.TRUE)) { // return "CU"; //$NON-NLS-1$ // } // return " U"; //$NON-NLS-1$ // } // if (bindingElement.getConflict().equals(Boolean.TRUE)) { // return "C "; //$NON-NLS-1$ // } // return " "; //$NON-NLS-1$ // } // return null; // } // // public Image getColumnImage(Object element, int index) { // BindingElement be = (BindingElement) element; // switch (index) { // case COMMAND_NAME_COLUMN: // final String commandId = be.getId(); // final ImageDescriptor imageDescriptor = commandImageService // .getImageDescriptor(commandId); // if (imageDescriptor == null) { // return null; // } // try { // return localResourceManager.createImage(imageDescriptor); // } catch (final DeviceResourceException e) { // final String message = "Problem retrieving image for a command '" //$NON-NLS-1$ // + commandId + '\''; // final IStatus status = new Status(IStatus.ERROR, // WorkbenchPlugin.PI_WORKBENCH, 0, message, e); // WorkbenchPlugin.log(message, status); // } // return null; // //// case USER_DELTA_COLUMN: //// if (be.getUserDelta().intValue() == Binding.USER) { //// if (be.getConflict().equals(Boolean.TRUE)) { //// return ImageFactory.getImage("plus"); //$NON-NLS-1$ //// } //// return ImageFactory.getImage("change"); //$NON-NLS-1$ //// } //// if (be.getConflict().equals(Boolean.TRUE)) { //// return ImageFactory.getImage("minus"); //$NON-NLS-1$ //// } //// return ImageFactory.getImage("blank"); //$NON-NLS-1$ // } // // return null; // } // } // // class ModelContentProvider implements ITreeContentProvider { // public Object[] getChildren(Object parentElement) { // if (parentElement instanceof BindingModel) { // return ((BindingModel) parentElement).getBindings().toArray(); // } // if (parentElement instanceof ContextModel) { // return ((ContextModel) parentElement).getContexts().toArray(); // } // if (parentElement instanceof SchemeModel) { // return ((SchemeModel) parentElement).getSchemes().toArray(); // } // return new Object[0]; // } // // public Object getParent(Object element) { // return ((ModelElement) element).getParent(); // } // // public boolean hasChildren(Object element) { // return (element instanceof BindingModel) // || (element instanceof ContextModel) // || (element instanceof SchemeModel); // } // // public Object[] getElements(Object inputElement) { // return getChildren(inputElement); // } // // public void dispose() { // } // // public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { // } // // } // // /* // * (non-Javadoc) // * // * @see org.eclipse.jface.preference.PreferencePage#createContents(org.eclipse.swt.widgets.Composite) // */ // protected Control createContents(Composite parent) { // PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, // IWorkbenchHelpContextIds.KEYS_PREFERENCE_PAGE); // final Composite page = new Composite(parent, SWT.NONE); // GridLayout layout = new GridLayout(1, false); // layout.marginWidth = 0; // page.setLayout(layout); // // IDialogSettings settings = getDialogSettings(); // // fPatternFilter = new CategoryPatternFilter(true, commandService // .getCategory(null)); // if (settings.get(TAG_FILTER_UNCAT) != null) { // fPatternFilter.filterCategories(settings // .getBoolean(TAG_FILTER_UNCAT)); // } // // createSchemeControls(page); // createTree(page); // createTreeControls(page); // createDataControls(page); // createButtonBar(page); // // fill(); // // applyDialogFont(page); // // // we want the description text control to span four lines, but because // // we need the dialog's font for this information, we have to set it here // // after the dialog font has been applied // GC gc = new GC(fDescriptionText); // gc.setFont(fDescriptionText.getFont()); // FontMetrics metrics = gc.getFontMetrics(); // gc.dispose(); // int height = metrics.getHeight() * 4; // // GridData gridData = new GridData(); // gridData.grabExcessHorizontalSpace = true; // gridData.horizontalAlignment = SWT.FILL; // gridData.horizontalSpan = 2; // gridData.heightHint = height; // fDescriptionText.setLayoutData(gridData); // // return page; // } // // /** // * Creates the button bar across the bottom of the preference page. This // * button bar contains the "Advanced..." button. // * // * @param parent // * The composite in which the button bar should be placed; never // * <code>null</code>. // * @return The button bar composite; never <code>null</code>. // */ // private final Control createButtonBar(final Composite parent) { // GridLayout layout; // GridData gridData; // int widthHint; // // // Create the composite to house the button bar. // final Composite buttonBar = new Composite(parent, SWT.NONE); // layout = new GridLayout(2, false); // layout.marginWidth = 0; // buttonBar.setLayout(layout); // gridData = new GridData(); // gridData.horizontalAlignment = SWT.END; // buttonBar.setLayoutData(gridData); // // // Advanced button. // final Button filtersButton = new Button(buttonBar, SWT.PUSH); // gridData = new GridData(); // widthHint = convertHorizontalDLUsToPixels(IDialogConstants.BUTTON_WIDTH); // filtersButton.setText(NewKeysPreferenceMessages.FiltersButton_Text); // gridData.widthHint = Math.max(widthHint, filtersButton.computeSize( // SWT.DEFAULT, SWT.DEFAULT, true).x) + 5; // filtersButton.setLayoutData(gridData); // filtersButton.addSelectionListener(new SelectionListener() { // public void widgetDefaultSelected(SelectionEvent e) { // } // // public void widgetSelected(SelectionEvent e) { // KeysPreferenceFiltersDialog dialog = new KeysPreferenceFiltersDialog( // getShell()); // dialog.setFilterActionSet(fFilterActionSetContexts); // dialog.setFilterInternal(fFilterInternalContexts); // dialog.setFilterUncategorized(fFilteredTree // .isFilteringCategories()); // if (dialog.open() == Window.OK) { // fFilterActionSetContexts = dialog.getFilterActionSet(); // fFilterInternalContexts = dialog.getFilterInternal(); // fFilteredTree.filterCategories(dialog // .getFilterUncategorized()); // // // Apply context filters // keyController.filterContexts(fFilterActionSetContexts, // fFilterInternalContexts); // // ISelection currentContextSelection = fWhenCombo // .getSelection(); // fWhenCombo.setInput(keyController.getContextModel()); // fWhenCombo.setSelection(currentContextSelection); // } // } // }); // // // Export bindings to CSV // final Button exportButton = new Button(buttonBar, SWT.PUSH); // // gridData = new GridData(); // widthHint = convertHorizontalDLUsToPixels(IDialogConstants.BUTTON_WIDTH); // exportButton.setText(NewKeysPreferenceMessages.ExportButton_Text); // gridData.widthHint = Math.max(widthHint, exportButton.computeSize( // SWT.DEFAULT, SWT.DEFAULT, true).x) + 5; // exportButton.setLayoutData(gridData); // exportButton.addSelectionListener(new SelectionListener() { // // public void widgetDefaultSelected(SelectionEvent e) { // } // // public void widgetSelected(SelectionEvent e) { // keyController.exportCSV(((Button) e.getSource()).getShell()); // } // // }); // // return buttonBar; // } // // private final void createDataControls(final Composite parent) { // GridLayout layout; // GridData gridData; // // // Creates the data area. // final Composite dataArea = new Composite(parent, SWT.NONE); // layout = new GridLayout(2, true); // layout.marginWidth = 0; // dataArea.setLayout(layout); // gridData = new GridData(); // gridData.grabExcessHorizontalSpace = true; // gridData.horizontalAlignment = SWT.FILL; // dataArea.setLayoutData(gridData); // // // LEFT DATA AREA // // Creates the left data area. // final Composite leftDataArea = new Composite(dataArea, SWT.NONE); // layout = new GridLayout(3, false); // leftDataArea.setLayout(layout); // gridData = new GridData(); // gridData.grabExcessHorizontalSpace = true; // gridData.verticalAlignment = SWT.TOP; // gridData.horizontalAlignment = SWT.FILL; // leftDataArea.setLayoutData(gridData); // // // The command name label. // final Label commandNameLabel = new Label(leftDataArea, SWT.NONE); // commandNameLabel // .setText(NewKeysPreferenceMessages.CommandNameLabel_Text); // // // The current command name. // commandNameValueLabel = new Label(leftDataArea, SWT.NONE); // gridData = new GridData(); // gridData.grabExcessHorizontalSpace = true; // gridData.horizontalSpan = 2; // gridData.horizontalAlignment = SWT.FILL; // commandNameValueLabel.setLayoutData(gridData); // // final Label commandDescriptionlabel = new Label(leftDataArea, SWT.LEAD); // commandDescriptionlabel.setText(NewKeysPreferenceMessages.CommandDescriptionLabel_Text); // gridData = new GridData(); // gridData.verticalAlignment = SWT.BEGINNING; // commandDescriptionlabel.setLayoutData(gridData); // // fDescriptionText = new Text(leftDataArea, SWT.MULTI | SWT.WRAP // | SWT.BORDER | SWT.READ_ONLY); // // // The binding label. // final Label bindingLabel = new Label(leftDataArea, SWT.NONE); // bindingLabel.setText(NewKeysPreferenceMessages.BindingLabel_Text); // // // The key sequence entry widget. // fBindingText = new Text(leftDataArea, SWT.BORDER); // gridData = new GridData(); // gridData.grabExcessHorizontalSpace = true; // gridData.horizontalAlignment = SWT.FILL; // gridData.widthHint = 200; // fBindingText.setLayoutData(gridData); // // fBindingText.addFocusListener(new FocusListener() { // public void focusGained(FocusEvent e) { // fBindingService.setKeyFilterEnabled(false); // } // // public void focusLost(FocusEvent e) { // fBindingService.setKeyFilterEnabled(true); // } // }); // fBindingText.addDisposeListener(new DisposeListener() { // public void widgetDisposed(DisposeEvent e) { // if (!fBindingService.isKeyFilterEnabled()) { // fBindingService.setKeyFilterEnabled(true); // } // } // }); // // fKeySequenceText = new KeySequenceText(fBindingText); // fKeySequenceText.setKeyStrokeLimit(4); // fKeySequenceText // .addPropertyChangeListener(new IPropertyChangeListener() { // public final void propertyChange( // final PropertyChangeEvent event) { // if (!event.getOldValue().equals(event.getNewValue())) { // final KeySequence keySequence = fKeySequenceText // .getKeySequence(); // if (!keySequence.isComplete()) { // return; // } // // BindingElement activeBinding = (BindingElement) keyController // .getBindingModel().getSelectedElement(); // if (activeBinding != null) { // activeBinding.setTrigger(keySequence); // } // fBindingText.setSelection(fBindingText // .getTextLimit()); // } // } // }); // // // Button for adding trapped key strokes // final Button addKeyButton = new Button(leftDataArea, SWT.LEFT // | SWT.ARROW); // addKeyButton // .setToolTipText(NewKeysPreferenceMessages.AddKeyButton_ToolTipText); // gridData = new GridData(); // gridData.heightHint = fSchemeCombo.getCombo().getTextHeight(); // addKeyButton.setLayoutData(gridData); // // // Arrow buttons aren't normally added to the tab list. Let's fix that. // final Control[] tabStops = dataArea.getTabList(); // final ArrayList newTabStops = new ArrayList(); // for (int i = 0; i < tabStops.length; i++) { // Control tabStop = tabStops[i]; // newTabStops.add(tabStop); // if (fBindingText.equals(tabStop)) { // newTabStops.add(addKeyButton); // } // } // final Control[] newTabStopArray = (Control[]) newTabStops // .toArray(new Control[newTabStops.size()]); // dataArea.setTabList(newTabStopArray); // // // Construct the menu to attach to the above button. // final Menu addKeyMenu = new Menu(addKeyButton); // final Iterator trappedKeyItr = KeySequenceText.TRAPPED_KEYS.iterator(); // while (trappedKeyItr.hasNext()) { // final KeyStroke trappedKey = (KeyStroke) trappedKeyItr.next(); // final MenuItem menuItem = new MenuItem(addKeyMenu, SWT.PUSH); // menuItem.setText(trappedKey.format()); // menuItem.addSelectionListener(new SelectionAdapter() { // // public void widgetSelected(SelectionEvent e) { // fKeySequenceText.insert(trappedKey); // fBindingText.setFocus(); // fBindingText.setSelection(fBindingText.getTextLimit()); // } // }); // } // addKeyButton.addSelectionListener(new SelectionAdapter() { // // public void widgetSelected(SelectionEvent selectionEvent) { // Point buttonLocation = addKeyButton.getLocation(); // buttonLocation = dataArea.toDisplay(buttonLocation.x, // buttonLocation.y); // Point buttonSize = addKeyButton.getSize(); // addKeyMenu.setLocation(buttonLocation.x, buttonLocation.y // + buttonSize.y); // addKeyMenu.setVisible(true); // } // }); // // // The when label. // final Label whenLabel = new Label(leftDataArea, SWT.NONE); // whenLabel.setText(NewKeysPreferenceMessages.WhenLabel_Text); // // // The when combo. // fWhenCombo = new ComboViewer(leftDataArea); // gridData = new GridData(); // gridData.grabExcessHorizontalSpace = true; // gridData.horizontalAlignment = SWT.FILL; // gridData.horizontalSpan = 2; // ViewerComparator comparator = new ViewerComparator(); // fWhenCombo.setComparator(comparator); // fWhenCombo.getCombo().setVisibleItemCount(ITEMS_TO_SHOW); // fWhenCombo.getCombo().setLayoutData(gridData); // fWhenCombo.setContentProvider(new ModelContentProvider()); // fWhenCombo.setLabelProvider(new ListLabelProvider()); // fWhenCombo.addSelectionChangedListener(new ISelectionChangedListener() { // public final void selectionChanged(final SelectionChangedEvent event) { // ContextElement context = (ContextElement) ((IStructuredSelection) event // .getSelection()).getFirstElement(); // keyController.getContextModel().setSelectedElement(context); // } // }); // IPropertyChangeListener whenListener = new IPropertyChangeListener() { // // // Sets the combo selection when a new keybinding is selected? // public void propertyChange(PropertyChangeEvent event) { // if (event.getSource() == keyController.getContextModel() // && CommonModel.PROP_SELECTED_ELEMENT.equals(event // .getProperty())) { // Object newVal = event.getNewValue(); // StructuredSelection structuredSelection = newVal == null ? null // : new StructuredSelection(newVal); // fWhenCombo.setSelection(structuredSelection, true); // } // } // }; // keyController.addPropertyChangeListener(whenListener); // // // RIGHT DATA AREA // // Creates the right data area. // final Composite rightDataArea = new Composite(dataArea, SWT.NONE); // layout = new GridLayout(1, false); // rightDataArea.setLayout(layout); // gridData = new GridData(SWT.FILL, SWT.FILL, true, true); // rightDataArea.setLayoutData(gridData); // // // The description label. // final Label descriptionLabel = new Label(rightDataArea, SWT.NONE); // descriptionLabel.setText(NewKeysPreferenceMessages.ConflictsLabel_Text); // gridData = new GridData(); // gridData.grabExcessHorizontalSpace = true; // gridData.horizontalAlignment = SWT.FILL; // descriptionLabel.setLayoutData(gridData); // // conflictViewer = new ListViewer(rightDataArea, SWT.MULTI | SWT.V_SCROLL // | SWT.BORDER); // gridData = new GridData(SWT.FILL, SWT.FILL, true, true); // gridData.horizontalIndent = 10; // conflictViewer.getControl().setLayoutData(gridData); // conflictViewer.setContentProvider(new IStructuredContentProvider() { // // public Object[] getElements(Object inputElement) { // if (inputElement instanceof Collection) { // return ((Collection) inputElement).toArray(); // } // return new Object[0]; // } // // public void dispose() { // } // // public void inputChanged(Viewer viewer, Object oldInput, // Object newInput) { // } // }); // conflictViewer.setLabelProvider(new BindingElementLabelProvider()); // conflictViewer // .addSelectionChangedListener(new ISelectionChangedListener() { // // // When the conflict viewer's selection changes, update the // // model's current selection // public void selectionChanged(SelectionChangedEvent event) { // ModelElement binding = (ModelElement) ((IStructuredSelection) event // .getSelection()).getFirstElement(); // BindingModel bindingModel = keyController // .getBindingModel(); // if (binding != null // && binding != bindingModel.getSelectedElement()) { // StructuredSelection selection = new StructuredSelection( // binding); // // bindingModel.setSelectedElement(binding); // conflictViewer.setSelection(selection); // // boolean selectionVisible = false; // TreeItem[] items = fFilteredTree.getViewer() // .getTree().getItems(); // for (int i = 0; i < items.length; i++) { // if (items[i].getData().equals(binding)) { // selectionVisible = true; // break; // } // } // // if (!selectionVisible) { // fFilteredTree.getFilterControl().setText(""); //$NON-NLS-1$ // fFilteredTree.getViewer().refresh(); // bindingModel.setSelectedElement(binding); // conflictViewer.setSelection(selection); // } // } // } // }); // // IPropertyChangeListener conflictsListener = new IPropertyChangeListener() { // public void propertyChange(PropertyChangeEvent event) { // if (event.getSource() == keyController.getConflictModel() // && CommonModel.PROP_SELECTED_ELEMENT.equals(event // .getProperty())) { // if (keyController.getConflictModel().getConflicts() != null) { // Object newVal = event.getNewValue(); // StructuredSelection structuredSelection = newVal == null ? null // : new StructuredSelection(newVal); // conflictViewer.setSelection(structuredSelection, true); // } // } else if (ConflictModel.PROP_CONFLICTS.equals(event // .getProperty())) { // conflictViewer.setInput(event.getNewValue()); // } else if (ConflictModel.PROP_CONFLICTS_ADD.equals(event // .getProperty())) { // conflictViewer.add(event.getNewValue()); // } else if (ConflictModel.PROP_CONFLICTS_REMOVE.equals(event // .getProperty())) { // conflictViewer.remove(event.getNewValue()); // } // } // }; // keyController.addPropertyChangeListener(conflictsListener); // // IPropertyChangeListener dataUpdateListener = new IPropertyChangeListener() { // // public void propertyChange(PropertyChangeEvent event) { // BindingElement bindingElement = null; // boolean weCare = false; // if (event.getSource() == keyController.getBindingModel() // && CommonModel.PROP_SELECTED_ELEMENT.equals(event // .getProperty())) { // bindingElement = (BindingElement) event.getNewValue(); // weCare = true; // } else if (event.getSource() == keyController.getBindingModel() // .getSelectedElement() // && ModelElement.PROP_MODEL_OBJECT.equals(event // .getProperty())) { // bindingElement = (BindingElement) event.getSource(); // weCare = true; // } // if (bindingElement == null && weCare) { // commandNameValueLabel.setText(""); //$NON-NLS-1$ // fDescriptionText.setText(""); //$NON-NLS-1$ // fBindingText.setText(""); //$NON-NLS-1$ // fWhenCombo.setSelection(null); // fWhenCombo.getCombo().setVisible(false); // whenLabel.setVisible(false); // } else if (bindingElement != null) { // commandNameValueLabel.setText(bindingElement.getName()); // String desc = bindingElement.getDescription(); // fDescriptionText.setText(desc==null?"":desc); //$NON-NLS-1$ // KeySequence trigger = (KeySequence) bindingElement // .getTrigger(); // fKeySequenceText.setKeySequence(trigger); // Object context = bindingElement.getContext(); // fWhenCombo.setSelection(context == null ? null // : new StructuredSelection(context)); // fWhenCombo.getCombo().setVisible(context != null); // whenLabel.setVisible(context != null); // } // } // }; // keyController.addPropertyChangeListener(dataUpdateListener); // // } // // private void createTree(Composite parent) { // fPatternFilter = new CategoryPatternFilter(true, fDefaultCategory); // fPatternFilter.filterCategories(true); // // GridData gridData; // // fFilteredTree = new CategoryFilterTree(parent, SWT.SINGLE // | SWT.FULL_SELECTION | SWT.BORDER, fPatternFilter); // final GridLayout layout = new GridLayout(1, false); // layout.marginWidth = 0; // fFilteredTree.setLayout(layout); // gridData = new GridData(); // gridData.grabExcessHorizontalSpace = true; // gridData.grabExcessVerticalSpace = true; // gridData.horizontalAlignment = SWT.FILL; // gridData.verticalAlignment = SWT.FILL; // fFilteredTree.setLayoutData(gridData); // // final TreeViewer viewer = fFilteredTree.getViewer(); // // Make sure the filtered tree has a height of ITEMS_TO_SHOW // final Tree tree = viewer.getTree(); // tree.setHeaderVisible(true); // final Object layoutData = tree.getLayoutData(); // if (layoutData instanceof GridData) { // gridData = (GridData) layoutData; // final int itemHeight = tree.getItemHeight(); // if (itemHeight > 1) { // gridData.heightHint = ITEMS_TO_SHOW * itemHeight; // } // } // // BindingModelComparator comparator = new BindingModelComparator(); // viewer.setComparator(comparator); // // final TreeColumn commandNameColumn = new TreeColumn(tree, SWT.LEFT, // COMMAND_NAME_COLUMN); // commandNameColumn // .setText(NewKeysPreferenceMessages.CommandNameColumn_Text); // tree.setSortColumn(commandNameColumn); // tree.setSortDirection(comparator.isAscending() ? SWT.UP : SWT.DOWN); // commandNameColumn.addSelectionListener(new ResortColumn(comparator, // commandNameColumn, viewer, COMMAND_NAME_COLUMN)); // // final TreeColumn triggerSequenceColumn = new TreeColumn(tree, SWT.LEFT, // KEY_SEQUENCE_COLUMN); // triggerSequenceColumn // .setText(NewKeysPreferenceMessages.TriggerSequenceColumn_Text); // triggerSequenceColumn.addSelectionListener(new ResortColumn(comparator, // triggerSequenceColumn, viewer, KEY_SEQUENCE_COLUMN)); // // final TreeColumn whenColumn = new TreeColumn(tree, SWT.LEFT, // CONTEXT_COLUMN); // whenColumn.setText(NewKeysPreferenceMessages.WhenColumn_Text); // whenColumn.addSelectionListener(new ResortColumn(comparator, // whenColumn, viewer, CONTEXT_COLUMN)); // // final TreeColumn categoryColumn = new TreeColumn(tree, SWT.LEFT, // CATEGORY_COLUMN); // categoryColumn.setText(NewKeysPreferenceMessages.CategoryColumn_Text); // categoryColumn.addSelectionListener(new ResortColumn(comparator, // categoryColumn, viewer, CATEGORY_COLUMN)); // // final TreeColumn userMarker = new TreeColumn(tree, SWT.LEFT, // USER_DELTA_COLUMN); // userMarker.setText(NewKeysPreferenceMessages.UserColumn_Text); // userMarker.addSelectionListener(new ResortColumn(comparator, // userMarker, viewer, USER_DELTA_COLUMN)); // // viewer.setContentProvider(new ModelContentProvider()); // viewer.setLabelProvider(new BindingElementLabelProvider()); // // fFilteredTree.getPatternFilter().setIncludeLeadingWildcard(true); // final TreeColumn[] columns = viewer.getTree().getColumns(); // // columns[COMMAND_NAME_COLUMN].setWidth(240); // columns[KEY_SEQUENCE_COLUMN].setWidth(130); // columns[CONTEXT_COLUMN].setWidth(130); // columns[CATEGORY_COLUMN].setWidth(130); // columns[USER_DELTA_COLUMN].setWidth(50); // // viewer.addSelectionChangedListener(new ISelectionChangedListener() { // // // When the viewer changes selection, update the model's current // // selection // public void selectionChanged(SelectionChangedEvent event) { // ModelElement binding = (ModelElement) ((IStructuredSelection) event // .getSelection()).getFirstElement(); // keyController.getBindingModel().setSelectedElement(binding); // } // }); // // IPropertyChangeListener treeUpdateListener = new IPropertyChangeListener() { // // // When the model changes a property, update the viewer // public void propertyChange(PropertyChangeEvent event) { // if (event.getSource() == keyController.getBindingModel() // && CommonModel.PROP_SELECTED_ELEMENT.equals(event // .getProperty())) { // Object newVal = event.getNewValue(); // StructuredSelection structuredSelection = newVal == null ? null // : new StructuredSelection(newVal); // viewer.setSelection(structuredSelection, true); // } else if (event.getSource() instanceof BindingElement // && ModelElement.PROP_MODEL_OBJECT.equals(event // .getProperty())) { // viewer.update(event.getSource(), null); // } else if (BindingElement.PROP_CONFLICT.equals(event // .getProperty())) { // viewer.update(event.getSource(), null); // } else if (BindingModel.PROP_BINDINGS.equals(event // .getProperty())) { // viewer.refresh(); // } else if (BindingModel.PROP_BINDING_ADD.equals(event // .getProperty())) { // viewer.add(keyController.getBindingModel(), event // .getNewValue()); // } else if (BindingModel.PROP_BINDING_REMOVE.equals(event // .getProperty())) { // viewer.remove(event.getNewValue()); // } else if (BindingModel.PROP_BINDING_FILTER.equals(event // .getProperty())) { // viewer.refresh(); // } // } // }; // keyController.addPropertyChangeListener(treeUpdateListener); // // as far as I got // } // // private final Control createTreeControls(final Composite parent) { // GridLayout layout; // GridData gridData; // int widthHint; // // // Creates controls related to the tree. // final Composite treeControls = new Composite(parent, SWT.NONE); // layout = new GridLayout(4, false); // layout.marginWidth = 0; // treeControls.setLayout(layout); // gridData = new GridData(); // gridData.grabExcessHorizontalSpace = true; // gridData.horizontalAlignment = SWT.FILL; // treeControls.setLayoutData(gridData); // // final Button addBindingButton = new Button(treeControls, SWT.PUSH); // gridData = new GridData(); // widthHint = convertHorizontalDLUsToPixels(IDialogConstants.BUTTON_WIDTH); // addBindingButton // .setText(NewKeysPreferenceMessages.AddBindingButton_Text); // gridData.widthHint = Math.max(widthHint, addBindingButton.computeSize( // SWT.DEFAULT, SWT.DEFAULT, true).x) + 5; // addBindingButton.setLayoutData(gridData); // addBindingButton.addSelectionListener(new SelectionAdapter() { // public final void widgetSelected(final SelectionEvent event) { // keyController.getBindingModel().copy(); // } // }); // // final Button removeBindingButton = new Button(treeControls, SWT.PUSH); // gridData = new GridData(); // widthHint = convertHorizontalDLUsToPixels(IDialogConstants.BUTTON_WIDTH); // removeBindingButton // .setText(NewKeysPreferenceMessages.RemoveBindingButton_Text); // gridData.widthHint = Math.max(widthHint, removeBindingButton // .computeSize(SWT.DEFAULT, SWT.DEFAULT, true).x) + 5; // removeBindingButton.setLayoutData(gridData); // removeBindingButton.addSelectionListener(new SelectionAdapter() { // public final void widgetSelected(final SelectionEvent event) { // keyController.getBindingModel().remove(); // } // }); // // final Button restore = new Button(treeControls, SWT.PUSH); // gridData = new GridData(); // widthHint = convertHorizontalDLUsToPixels(IDialogConstants.BUTTON_WIDTH); // restore.setText(NewKeysPreferenceMessages.RestoreBindingButton_Text); // gridData.widthHint = Math.max(widthHint, restore.computeSize( // SWT.DEFAULT, SWT.DEFAULT, true).x) + 5; // restore.setLayoutData(gridData); // restore.addSelectionListener(new SelectionAdapter() { // public final void widgetSelected(final SelectionEvent event) { // try { // fFilteredTree.setRedraw(false); // BindingModel bindingModel = keyController.getBindingModel(); // bindingModel // .restoreBinding(keyController.getContextModel()); // } finally { // fFilteredTree.setRedraw(true); // } // } // }); // // return treeControls; // } // // /** // * // */ // private void fill() { // fSchemeCombo.setInput(keyController.getSchemeModel()); // fSchemeCombo.setSelection(new StructuredSelection(keyController // .getSchemeModel().getSelectedElement())); // // // Apply context filters // keyController.filterContexts(fFilterActionSetContexts, // fFilterInternalContexts); // fWhenCombo.setInput(keyController.getContextModel()); // // fFilteredTree.filterCategories(fPatternFilter.isFilteringCategories()); // fFilteredTree.getViewer().setInput(keyController.getBindingModel()); // } // // private void createSchemeControls(Composite parent) { // final Composite schemeControls = new Composite(parent, SWT.NONE); // GridLayout layout = new GridLayout(3, false); // layout.marginWidth = 0; // schemeControls.setLayout(layout); // // final Label schemeLabel = new Label(schemeControls, SWT.NONE); // schemeLabel.setText(NewKeysPreferenceMessages.SchemeLabel_Text); // // fSchemeCombo = new ComboViewer(schemeControls); // fSchemeCombo.setLabelProvider(new ListLabelProvider()); // fSchemeCombo.setContentProvider(new ModelContentProvider()); // GridData gridData = new GridData(); // gridData.widthHint = 150; // gridData.horizontalAlignment = SWT.FILL; // fSchemeCombo.getCombo().setLayoutData(gridData); // fSchemeCombo // .addSelectionChangedListener(new ISelectionChangedListener() { // public final void selectionChanged( // final SelectionChangedEvent event) { // BusyIndicator.showWhile(fFilteredTree.getViewer() // .getTree().getDisplay(), new Runnable() { // public void run() { // SchemeElement scheme = (SchemeElement) ((IStructuredSelection) event // .getSelection()).getFirstElement(); // keyController.getSchemeModel() // .setSelectedElement(scheme); // } // }); // } // }); // IPropertyChangeListener listener = new IPropertyChangeListener() { // // public void propertyChange(PropertyChangeEvent event) { // if (event.getSource() == keyController.getSchemeModel() // && CommonModel.PROP_SELECTED_ELEMENT.equals(event // .getProperty())) { // Object newVal = event.getNewValue(); // StructuredSelection structuredSelection = newVal == null ? null // : new StructuredSelection(newVal); // fSchemeCombo.setSelection(structuredSelection, true); // } // } // }; // // keyController.addPropertyChangeListener(listener); // } // // /* // * (non-Javadoc) // * // * @see org.eclipse.ui.IWorkbenchPreferencePage#init(org.eclipse.ui.IWorkbench) // */ // public void init(IWorkbench workbench) { // keyController = new KeyController(); // keyController.init(workbench); // // commandService = (ICommandService) workbench // .getService(ICommandService.class); // fDefaultCategory = commandService.getCategory(null); // fBindingService = (IBindingService) workbench // .getService(IBindingService.class); // // commandImageService = (ICommandImageService) workbench // .getService(ICommandImageService.class); // } // // public void applyData(Object data) { // if (data instanceof ModelElement) { // keyController.getBindingModel().setSelectedElement( // (ModelElement) data); // } // if (data instanceof Binding && fFilteredTree != null) { // BindingElement be = (BindingElement) keyController // .getBindingModel().getBindingToElement().get(data); // fFilteredTree.getViewer().setSelection(new StructuredSelection(be), // true); // } // } // // /* // * (non-Javadoc) // * // * @see org.eclipse.jface.preference.PreferencePage#performOk() // */ // public boolean performOk() { // keyController.saveBindings(fBindingService); // saveState(getDialogSettings()); // return super.performOk(); // } // // /** // * Save the state of the receiver. // * // * @param dialogSettings // */ // public void saveState(IDialogSettings dialogSettings) { // if (dialogSettings == null) { // return; // } // dialogSettings.put(TAG_FILTER_ACTION_SETS, fFilterActionSetContexts); // dialogSettings.put(TAG_FILTER_INTERNAL, fFilterInternalContexts); // dialogSettings.put(TAG_FILTER_UNCAT, fFilteredTree // .isFilteringCategories()); // } // // protected IDialogSettings getDialogSettings() { // IDialogSettings workbenchSettings = WorkbenchPlugin.getDefault() // .getDialogSettings(); // // IDialogSettings settings = workbenchSettings // .getSection(TAG_DIALOG_SECTION); // // if (settings == null) { // settings = workbenchSettings.addNewSection(TAG_DIALOG_SECTION); // } // return settings; // } // // protected final void performDefaults() { // // // Ask the user to confirm // final String title = NewKeysPreferenceMessages.RestoreDefaultsMessageBoxText; // final String message = NewKeysPreferenceMessages.RestoreDefaultsMessageBoxMessage; // final boolean confirmed = MessageDialog.openConfirm(getShell(), title, // message); // // if (confirmed) { // long startTime = 0L; // if (DEBUG) { // startTime = System.currentTimeMillis(); // } // // fFilteredTree.setRedraw(false); // BusyIndicator.showWhile(fFilteredTree.getViewer().getTree() // .getDisplay(), new Runnable() { // public void run() { // keyController.setDefaultBindings(fBindingService); // } // }); // fFilteredTree.setRedraw(true); // if (DEBUG) { // final long elapsedTime = System.currentTimeMillis() - startTime; // Tracing.printTrace(TRACING_COMPONENT, // "performDefaults:model in " //$NON-NLS-1$ // + elapsedTime + "ms"); //$NON-NLS-1$ // } // } // // super.performDefaults(); // } //}